#include "threadpool.hpp"
#include "task.hpp"
// #include <memory>
#include <ctime>
// #include "log.hpp"

// using namespace log_namespace;
#include "Logger.h"

int main()
{
    // std::cout << getCurtime() << std::endl;
    // Log lg;
    // lg.enable(FILE_TYPE);
    // lg.logMessage("main.cc", 10, DEBUG, "hello, %d, world: %c, hello: %f\n", 1000, 'A', 3.14);
    // sleep(1);

    // lg.logMessage("main.cc", 10, DEBUG, "hello, %d, world: %c, hello: %f\n", 1000, 'A', 3.14);
    // sleep(1);

    // EnableScreen();

    // LOG(INFO, "helloworld\n");

    // LOG( DEBUG, "hello, %d, world: %c, hello: %f\n", 1000, 'A', 3.14);
    // sleep(1);


    // LOG( DEBUG, "hello, %d, world: %c, hello: %f\n", 1000, 'A', 3.14);
    // sleep(1);

    // EnableFILE();

    // LOG( DEBUG, "hello, %d, world: %c, hello: %f\n", 1000, 'A', 3.14);
    // sleep(1);

    // LOG( DEBUG, "hello, %d, world: %c, hello: %f\n", 1000, 'A', 3.14);
    // sleep(1);


    // EnableScreen();

    // std::unique_ptr<threadPool> tp = std::make_unique<threadPool>();
    // srand(time(nullptr) ^ getpid());

    // threadPool<Task> *tp = new threadPool<Task>();
    // tp->init();
    // tp->start();


    
	if (!MyLogger::instance()->init("log.conf")) {
		fprintf(stderr, "init log module failed.\n");
		return -1;
	}

    int cnt = 10;
    while (cnt--)
    {
        //不断地向线程池推送任务
        usleep(20000);
        int x = rand() % 10 + 1; 
        usleep(x * 10000);
        int y = rand() % 10 + 1;
        Task t(x, y);
        // tp->enqueue(t);
        // 这里在是在运行时发现需要创建一个线程池，才去调用getInstance()这个方法
        threadPool<Task>::getInstance()->enqueue(t);
        LOG_INFO("enqueue a task, %s\n", t.debug().c_str());
        sleep(1);
    }

    // threadPool<Task>::getInstance()->stop();
    // LOG(INFO, "threadpool stop!\n");
    // std::cout << "thread pool stop" << std::endl;
    log4cpp::Category::shutdown();

    return 0;
}